home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 49 / Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso / -serious- / graphics / amicad / arexx_english / tracespice.amicad < prev    next >
Text File  |  1999-12-06  |  5KB  |  198 lines

  1. /* Tracé d'un fichier généré par Spice dans la fenêtre AmiCAD courante */
  2.  
  3. options results     /* indispensable pour récupérer le résultat des macros */
  4.  
  5. signal on error     /* pour l'interception des erreurs */
  6. signal on syntax
  7.  
  8. parse arg fichier
  9.  
  10. if fichier="" then do
  11.     'REQFILE("Fichier Spice","RAM:","*_spice")'
  12.     fichier=result
  13. end
  14. if fichier="" then exit
  15. if ~open(file, fichier, 'R') then do
  16.     'MESSAGE("Fichier de données"+CHR(10)+"non trouvé")'
  17.     return
  18. end
  19.  
  20. titre=readln(file)
  21. if left(titre,6)~="Title:" then do
  22.     'MESSAGE("Fichier de type inconnu"+CHR(10)+"En-tête:"+CHR(10)+"'titre'"):TITLE("")'
  23.     close(file)
  24.     exit
  25. end
  26.  
  27. 'IF(OBJECTS(-1)>0,MARKZONE(0,0,WWIDTH(-1)-1,WHEIGHT(-1)-1):MENU("Effacer"),0)'
  28. 'LOCK(-1):SAVEALL(-1):MODE_TRACÉ=DRAWMODE(1):ROTATE(0,0):SETSCALE(0,100,100)'
  29. 'TITLE("Lecture des données...")'
  30.  
  31. date=readln(file)
  32. plotname=readln(file)
  33. 'WRITE("'substr(titre,8)||' ('||substr(plotname,11)')",15,15)'
  34. flags=substr(readln(file),8)
  35. nv=readln(file)
  36. nv=substr(nv,16)
  37. np=readln(file)
  38. np=substr(np,13)
  39. command=readln(file)
  40. 'WRITE("Spice 'substr(command,10)||' '||substr(date,7)'",15,25)'
  41. v=readln(file)
  42. if v~="Variables:" then do
  43.     'UNLOCK(-1):MESSAGE("Déclaration variables"+CHR(10)+"non trouvée"):TITLE("")'
  44.     close(file)
  45.     exit
  46. end
  47.  
  48. v.0=readln(file)
  49. parse value v.0 with '09'x num '09'x nom '09'x type
  50. type_abcisse=type
  51.  
  52. do i=1 to nv-1
  53.     v.i=readln(file)
  54.     parse value v.i with '09'x num '09'x nom.i '09'x type.i
  55. end
  56. v=readln(file)
  57. if v~="Values:" then do
  58.     'UNLOCK(-1):MESSAGE("Déclaration valeurs"+CHR(10)+"non trouvée")'
  59.     close(file)
  60.     exit
  61. end
  62.  
  63. do i=0 to np-1
  64.     v=readln(file)
  65.     if flags = 'real' then do
  66.     parse var v p '09'x '09'x valeur
  67.     end
  68.     else parse var v p '09'x '09'x valeur ',' imaginaire
  69.     if p~=i then do
  70.     'UNLOCK(-1):MESSAGE("Erreur de lecture"+CHR(10)+"des données"+CHR(10)+"'p'"):TITLE("")'
  71.     close(file)
  72.     exit
  73.     end
  74.     xh.i=valeur
  75.     im.i=imaginaire
  76.     do j=1 to nv-1
  77.     v=readln(file)
  78.     if flags='real' then parse var v '09'x p
  79.     else parse var v '09'x p ',' imaginaire
  80.     yd.i.j=p
  81.     im.i.j=imaginaire
  82.     end
  83. end
  84.  
  85. /* recherche des limites des ordonnées (axe vertical) */
  86. ymin=yd.0.1
  87. ymax=yd.0.1
  88. do i=0 to np-1
  89.     do j=1 to nv-1
  90.     if ymin>yd.i.j then ymin=yd.i.j
  91.     if ymax<yd.i.j then ymax=yd.i.j
  92.     end
  93. end
  94.  
  95. /* Lecture des dimensions de la fenêtre */
  96. xgauche=70
  97. 'WWIDTH(-1)'
  98. largeur=result-xgauche-30
  99. yhaut=40
  100. 'WHEIGHT(-1)'
  101. hauteur=result-yhaut-65
  102.  
  103. /* Tracé du cadre */
  104. 'TITLE("Tracé des résultats...")'
  105. call tracer_contour
  106.  
  107. /* Tracé de la grille */
  108. lc=largeur%10            /* Lignes verticales */
  109. xc=xgauche+lc
  110. do i=1 to 9
  111.     'DRAW('xc','yhaut','xc','yhaut'+'hauteur')'
  112.     xc=xc+lc
  113. end
  114.  
  115. yl=hauteur%10            /* Lignes horizontales */
  116. do i=1 to 9
  117.     'DRAW('xgauche','yhaut+yl*i','xgauche+largeur','yhaut+yl*i')'
  118. end
  119.  
  120. /* Tracé des légendes */
  121. NUMERIC FORM ENGINEERING
  122. NUMERIC DIGITS 5
  123. 'DRAWMODE(1):ROTATE(0,3)'   /* Axe horizontal */
  124. xc=xgauche+5
  125. do i=0 to 10
  126.     rang=(np%10)*i
  127.     if rang>=np then rang=np-1
  128.     t=xh.rang
  129.     'WRITE("'left(t-0,6)'",'xc',WHEIGHT(-1)-10)'
  130.     xc=xc+lc
  131. end
  132. 'WRITE("'type_abcisse'",'xc+15-lc',WHEIGHT(-1)-10)'
  133.  
  134. if ymax-ymin>1 then do        /* Axe vertical */
  135.     ymin=(ymin-1)%1
  136.     ymax=(ymax+1)%1
  137. end
  138. 'ROTATE(0,0)'
  139. yl=hauteur%10
  140. do i=0 to 10
  141.     rang=((ymax-ymin)/10)*i+ymin
  142.     if abs(rang)<0.00001 then rang=0
  143.     'WRITE("'left(rang-0,6,' ')'",'xgauche-50','hauteur-yl*i+yhaut')'
  144. end
  145.  
  146. /* Tracé des courbes */
  147. pas_valeur=1
  148. pas_x=largeur/np
  149. do j=1 to nv-1
  150.     i=0
  151.     x0=xgauche
  152.     y0=calcul_ordonnee(yd.0.j)
  153.     if j<4 then 'DRAWMODE('j')'
  154.     else 'DRAWMODE('0-j')'
  155.     do while i<np
  156.     v=yd.i.j
  157.     if result<1 then leave
  158.     'DRAW('x0','y0','xgauche+(pas_x*i)%1','calcul_ordonnee(v)')'
  159.     x0=xgauche+(pas_x*i)%1
  160.     y0=calcul_ordonnee(v)
  161.     i=i+pas_valeur
  162.     end
  163.     'WWIDTH(-1)-'length(nom.j)*8'-20'; xn=result
  164.     'DRAW('xn-5','j*10','xn-15','j*10')'
  165.     'DRAWMODE(1):WRITE("'nom.j'",'xn','j*10+5')'
  166. end
  167. type_ordonnee=type.1
  168. do j=1 to nv-1
  169.     if type_ordonnee~=type.j then do
  170.     type_ordonnee=''
  171.     leave
  172.     end
  173. end
  174. if type_ordonnee~='' then 'WRITE("'type_ordonnee'",'xgauche-50','yhaut-5')'
  175.  
  176. 'UNLOCK(-1):DRAWMODE(MODE_TRACÉ):TITLE("")'
  177. close(file)
  178. exit
  179.  
  180. calcul_ordonnee: procedure expose ymin ymax hauteur yhaut
  181.     parse arg v
  182.     return hauteur-((abs(v-ymin)*hauteur/abs(ymax-ymin))%1)+yhaut
  183.  
  184. tracer_contour:
  185.     'SETFILL(0):DRAWMODE(-2):DRAW('xgauche','yhaut','xgauche','yhaut+hauteur'):DRAW('xgauche','yhaut+hauteur','xgauche+largeur','yhaut+hauteur')'
  186.     'DRAW('xgauche+largeur','yhaut+hauteur','xgauche+largeur','yhaut'):DRAW('xgauche+largeur','yhaut','xgauche','yhaut'):DRAWMODE(0)'
  187.     return
  188.  
  189. /* Traitement des erreurs, interruption du programme */
  190. syntax:
  191. erreur=RC
  192. 'MESSAGE("Script TracerSpice"+CHR(10)+"Erreur de syntaxe"+CHR(10)+"en ligne 'SIGL'"+CHR(10)+"'errortext(erreur)'"):UNLOCK(-1)'
  193. exit
  194.  
  195. error:
  196. 'MESSAGE("Script TracerSpice"+CHR(10)+"Erreur en ligne 'SIGL'"):UNLOCK(-1)'
  197. exit
  198.